package 把数组排成最小的数;

import java.util.ArrayList;

//题目描述
//输入一个正整数数组，把数组里所有数字拼接起来排成一个数，
// 打印能拼接出的所有数字中最小的一个。
// 例如输入数组{3，32，321}，则打印出这三个数字能排成的最小数字为321323。
public class Solution
{
    public String PrintMinNumber(int [] numbers)
    {
//        int maxlength=0;
//        //变为list<char[]>
//        ArrayList<char[]> charslist=new ArrayList<char[]>();
//
//        for (int i = 0; i < numbers.length; i++)
//        {
//            charslist.add(Integer.toString(numbers[i]).toCharArray());
//        }
//        for (int i = 0; i < charslist.size(); i++)
//        {
//            int lengh=charslist.get(i).length;
//            if (lengh>maxlength)
//                maxlength=lengh;//得到最大长度
//        }
        //沿着人解题的思路来，可能走不通或者过于麻烦
        //学会使用创建定义的方法，定义针对本题的新的大于小于关系，任意两个数，拼凑起来，再比较大小
        //相当于分治，这一步仅解决两个数的比较问题，下一步提供一个数组的进行两两比较
//判断输入
        if (numbers==null||numbers.length==0)return "";
        for (int i = 0; i < numbers.length; i++)
        {
            for (int j = i+1; j < numbers.length; j++)
            {
                String num1=numbers[i]+""+numbers[j];
                String num2=numbers[j]+""+numbers[i];
                //两个数的位数一定相等，可以用compareto直接比较，用int可能会有大数溢出问题
                if (num1.compareTo(num2)>0)
                {
                    int temp=numbers[i];
                    numbers[i]=numbers[j];
                    numbers[j]=temp;
                }

            }
        }
        String str="";
        for (int i = 0; i < numbers.length; i++)
        {
            str+=String.valueOf(numbers[i]);
        }
        return str;

    }

}
